// ===========   File : ListQueue.h =============//

#ifndef __LISTQUEUE_H__
#define __LISTQUEUE_H__

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

/**********************************************************************************
 *                              STRUCT DEFINE
************************************************************************************/

/* 实际运用过程中，根据自己需要添加成员节点的成员变量，不可修改结构体名 */
/*
    基于链表实现的队列操作
*/
typedef struct ListNode{
    int val;                    //节点值（根据自己需要修改数据类型）
    struct ListNode *next;      //指向下一个节点的指针
}ListNode;

/* 基于链表实现的结构体 */
typedef struct 
{
    ListNode *front,*rear;
    int queSize;
}LinkedListQueue;


/**********************************************************************************
 *                              Public  Function
************************************************************************************/
/* Create a queue */
LinkedListQueue *NewLinkedListQueue(void);

/* Create a queue node */
ListNode *NewListNode(int val);

/* Delete queue */
void DelLinkedListQueue(LinkedListQueue *queue);

/* Get queue length */
int ListQueueSize(LinkedListQueue *queue);

/* Determine whether the queue is empty */
_Bool ListQueueEmpty(LinkedListQueue *queue);

/* Add elements to the queue */
void ListQueuePush(LinkedListQueue *queue,int num);

/* Remove elements from the queue */
int ListQueuePeek(LinkedListQueue *queue);

#endif
